home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 2010 April
/
PCWorld0410.iso
/
pluginy Firefox
/
3082
/
3082.xpi
/
chrome
/
content
/
undo.js
< prev
Wrap
Text File
|
2010-01-14
|
10KB
|
222 lines
var undoClosedButt = {
populateUndoSubmenu: function(aNode) {
// remove existing menu items
while (aNode.hasChildNodes())
aNode.removeChild(aNode.firstChild);
// get closed-tabs from nsSessionStore
var ss = Cc["@mozilla.org/browser/sessionstore;1"].
getService(Ci.nsISessionStore);
// return if no restorable tabs
var noHistory = document.getElementById("bundle_undoclosedtabsbutton")
.getString("noHistory");
if (ss.getClosedTabCount(window) == 0) {
aNode.appendChild(document.createElement("menuitem"));
aNode.firstChild.setAttribute("label", noHistory);
aNode.firstChild.setAttribute("disabled", "true");
return;
}
// populate menu
var undoItems = eval("(" + ss.getClosedTabData(window) + ")");
for(var i = 0; i < undoItems.length; i++) {
var m = aNode.appendChild(document.createElement("menuitem"));
m.setAttribute("class", "menuitem-iconic bookmark-item");
m.setAttribute("label", undoItems[i].title);
m.setAttribute("value", i);
m.setAttribute("oncommand", "undoCloseTab(" + i + ");");
m.setAttribute("image", "moz-anno:favicon:" + undoItems[i].image);
// Set the targetURI attribute so it will be shown in tooltip and statusbar.
// SessionStore uses one-based indexes, so we need to normalize them.
let tabData = undoItems[i].state;
let activeIndex = (tabData.index || tabData.entries.length) - 1;
if (activeIndex >= 0 && tabData.entries[activeIndex])
m.setAttribute("targetURI", tabData.entries[activeIndex].url);
}
// add option to clear closed tabs list
aNode.appendChild(document.createElement("menuseparator"));
var clearHistoryLabel = document.getElementById("bundle_undoclosedtabsbutton")
.getString("clearHistory");
var mItem = aNode.appendChild(document.createElement("menuitem"));
mItem.setAttribute("oncommand", "undoClosedButt.clearClosedTabsHistory()");
mItem.setAttribute("label", clearHistoryLabel);
mItem.tooltipText = mItem.label;
// "Restore All Tabs"
var strings = gNavigatorBundle;
m = aNode.appendChild(document.createElement("menuitem"));
m.setAttribute("label", strings.getString("menuRestoreAllTabs.label"));
m.setAttribute("accesskey", strings.getString("menuRestoreAllTabs.accesskey"));
m.addEventListener("command", function() {
for (var i = 0; i < undoItems.length; i++)
undoCloseTab();
}, false);
},
clearClosedTabsHistory: function() {
try {
var maxUndo = gPrefService.getIntPref("browser.sessionstore.max_tabs_undo");
} catch(ex) {
var maxUndo = 10;
gPrefService.setIntPref("browser.sessionstore.max_tabs_undo", maxUndo);
}
//clear close tabs history
gPrefService.setIntPref("browser.sessionstore.max_tabs_undo", 0);
//restore maximum undo history pref
gPrefService.setIntPref("browser.sessionstore.max_tabs_undo", maxUndo);
// update button disabled on TabOpen & TabClose
gBrowser.addEventListener("TabOpen",undoClosedButt.tabOpenClose,false);
gBrowser.addEventListener("TabClose",undoClosedButt.tabOpenClose,false);
gBrowser.addEventListener("TabOpen",undoClosedButt.tabbarOpenClose,false);
gBrowser.addEventListener("TabClose",undoClosedButt.tabbarOpenClose,false);
gBrowser.addEventListener("TabOpen",undoClosedButt.contextEntryOpenClose,false);
gBrowser.addEventListener("TabClose",undoClosedButt.contextEntryOpenClose,false);
// 1 second after browser window load
setTimeout("undoClosedButt.tabOpenClose()", 250);
setTimeout("undoClosedButt.tabbarOpenClose()", 250);
setTimeout("undoClosedButt.contextEntryOpenClose()", 250);
},
rightClickMenu: function(aNode, aEvent) {
if(aEvent.button == 2) {
var popup = document.getElementById("undoclosedtabsbutton-menu");
var x = aNode.boxObject.x;
var y = aNode.boxObject.y + aNode.boxObject.height;
document.popupNode = aNode;
popup.showPopup(aNode, x, y, "popup", null, null);
}
},
restartFX: function() {
var appStartup = Components.classes["@mozilla.org/toolkit/app-startup;1"]
.getService(Components.interfaces.nsIAppStartup);
appStartup.quit(appStartup.eForceQuit | appStartup.eRestart);
},
//Disable the toolbar button when no tabs to unclose
tabOpenClose: function() {
var ss = Components.classes["@mozilla.org/browser/sessionstore;1"].
getService(Components.interfaces.nsISessionStore);
var button = document.getElementById("undoclosedtabsbutton-toolbar-button") ;
var count = ss.getClosedTabCount(window);
// has closed tabs
if (button && count>0)
button.removeAttribute('disabled');
// no closed tabs
else if (button && count<1)
button.setAttribute("disabled", "true");
},
//Disable the tabbar button when no tabs to unclose
tabbarOpenClose: function() {
var ss = Components.classes["@mozilla.org/browser/sessionstore;1"].
getService(Components.interfaces.nsISessionStore);
var tabcontainer = document.getAnonymousElementByAttribute(gBrowser, "anonid", "tabcontainer");
var tabbarbutton = document.getAnonymousElementByAttribute(tabcontainer, "class", "uctb-tab-button");
var count = ss.getClosedTabCount(window);
// has closed tabs
if (tabcontainer, tabbarbutton && count>0)
tabbarbutton.removeAttribute('disabled');
// no closed tabs
else if (tabcontainer, tabbarbutton && count<1)
tabbarbutton.setAttribute("disabled", "true");
},
//Disable the context-menu entry when no tabs to unclose
contextEntryOpenClose: function() {
var ss = Components.classes["@mozilla.org/browser/sessionstore;1"].
getService(Components.interfaces.nsISessionStore);
var contextEntry = document.getElementById("uctb-contextentry") ;
var count = ss.getClosedTabCount(window);
// has closed tabs
if (contextEntry && count>0)
contextEntry.removeAttribute('disabled');
// no closed tabs
else if (contextEntry && count<1)
contextEntry.setAttribute("disabled", "true");
}
}
window.addEventListener("load", UCT_init, false);
function UCT_init() {
document.getElementById("contentAreaContextMenu").addEventListener("popupshowing", onUCTBPopup, false);
// Add attribute to nsSessionStore persistTabAttribute after delay
// we call this after nsSessionStore.init
window.setTimeout(UCT_ss_persist, 2000, false);
// add tab image and url in statustext to closed tab list
// add menu entry to clear the closed tabs list
eval("HistoryMenu.populateUndoSubmenu ="+HistoryMenu.populateUndoSubmenu.toString().replace(
'var m = undoPopup.appendChild(document.createElement("menuitem"));',
'$& \ m.setAttribute("class", "menuitem-iconic bookmark-item"); \
var tabData = undoItems[i].state; \
var activeIndex = (tabData.index || tabData.entries.length) - 1; \
m.setAttribute("statustext", tabData.entries[activeIndex].url); \
m.setAttribute("image", "moz-anno:favicon:" + undoItems[i].image);'
).replace(
'undoPopup.appendChild(document.createElement("menuseparator"));',
'$& \ var clearHistoryLabel = document.getElementById("bundle_undoclosedtabsbutton").getString("clearHistory");\
var mItem = undoPopup.appendChild(document.createElement("menuitem")); \
mItem.setAttribute("oncommand", "undoClosedButt.clearClosedTabsHistory()"); \
mItem.setAttribute("label", clearHistoryLabel);'
));
// update button disabled on TabOpen & TabClose
gBrowser.addEventListener("TabOpen",undoClosedButt.tabOpenClose,false);
gBrowser.addEventListener("TabClose",undoClosedButt.tabOpenClose,false);
gBrowser.addEventListener("TabOpen",undoClosedButt.tabbarOpenClose,false);
gBrowser.addEventListener("TabClose",undoClosedButt.tabbarOpenClose,false);
gBrowser.addEventListener("TabOpen",undoClosedButt.contextEntryOpenClose,false);
gBrowser.addEventListener("TabClose",undoClosedButt.contextEntryOpenClose,false);
// 1 second after browser window load
setTimeout("undoClosedButt.tabOpenClose()", 250);
setTimeout("undoClosedButt.tabbarOpenClose()", 250);
setTimeout("undoClosedButt.contextEntryOpenClose()", 250);
}
function UCT_ss_persist() {
if (!window.__SSi) // nsISessionStore not initialized
return;
var ss = Cc["@mozilla.org/browser/sessionstore;1"].
getService(Ci.nsISessionStore);
ss.persistTabAttribute("image");
}
function onUCTBPopup() {
var someConditions = !(gContextMenu.isContentSelected ||
gContextMenu.onLink ||
gContextMenu.onImage ||
gContextMenu.onTextInput);
gContextMenu.showItem("uctb-contextentry", someConditions);
gContextMenu.showItem("uctb-separator", someConditions);
}
function canQuitApplication() {
var os=Components.classes["@mozilla.org/observer-service;1"]
.getService(Components.interfaces.nsIObserverService)
if(!os)return true
try{
var cancelQuit=Components.classes["@mozilla.org/supports-PRBool;1"]
.createInstance(Components.interfaces.nsISupportsPRBool)
os.notifyObservers(cancelQuit,"quit-application-requested",null)
if(cancelQuit.data)
return false}
catch(ex){}
os.notifyObservers(null,"quit-application-granted",null)
return true
}